/**
 * 聊天相关API服务
 */
import { get, post } from '@/utils/request'
import { useAuthStore } from '@/stores/auth'

/**
 * 发送聊天消息（流式响应）
 * @param {object} data - 聊天消息数据 {message, chatId}
 * @param {function} onMessage - 接收流式数据的回调函数
 * @returns {Promise} - 返回Promise对象
 */
export function sendMessage(data, onMessage) {
  return new Promise((resolve, reject) => {
    // 将数据转换为URLSearchParams格式以匹配后端@RequestParam
    const formData = new URLSearchParams()
    formData.append('message', data.message)
    formData.append('chatId', data.chatId)
    
    // 使用fetch API来处理流式响应
    const baseURL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080'
    const url = `${baseURL}/user/chat/send`

    // 添加知识库编码到表单数据中（现在总是会有knowledgeCode，要么是用户选择的，要么是默认的'0000'）
    if (data.knowledgeCode && typeof data.knowledgeCode === 'string' && data.knowledgeCode.trim() !== '') {
      formData.append('knowledgeCode', data.knowledgeCode.trim())
      if (data.knowledgeCode.trim() === '0000') {
        console.log('API: 使用默认知识库编码: 0000')
      } else {
        console.log('API: 使用选择的知识库编码:', data.knowledgeCode.trim())
      }
    } else {
      console.log('API: 知识库编码无效，这不应该发生')
    }
    // 获取token
    const authStore = useAuthStore()
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
    
    if (authStore && authStore.token) {
      headers['token'] = authStore.token
    }
    
    fetch(url, {
      method: 'POST',
      headers: headers,
      body: formData
    })
    .then(response => {
      if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`)
      }
      
      const reader = response.body.getReader()
      const decoder = new TextDecoder()
      let buffer = ''
      
      function readStream() {
        return reader.read().then(({ done, value }) => {
          if (done) {
            // 流结束，处理剩余的buffer
            if (buffer.trim()) {
              onMessage && onMessage(buffer)
            }
            resolve({ data: buffer })
            return
          }
          
          // 解码数据块
          const chunk = decoder.decode(value, { stream: true })
          buffer += chunk
          
          // 实时调用回调函数传递数据
          if (onMessage) {
            onMessage(chunk)
          }
          
          // 继续读取下一个数据块
          return readStream()
        })
      }
      
      return readStream()
    })
    .catch(error => {
      console.error('流式请求失败:', error)
      reject(error)
    })
  })
}

/**
 * 获取聊天历史记录
 * @param {number} sessionId - 会话ID
 * @returns {Promise} - 返回Promise对象
 */
export function getChatHistory(sessionId) {
  return get('/user/chat/history', { sessionId })
}

/**
 * 创建新的聊天会话
 * @param {object} data - 会话数据 {title}
 * @returns {Promise} - 返回Promise对象
 */
export function createChatSession(data) {
  return post('/user/chat/session/create', data)
}

/**
 * 获取聊天会话列表
 * @returns {Promise} - 返回Promise对象
 */
export function getChatSessions() {
  return get('/user/chat/sessions')
}

/**
 * 删除聊天会话
 * @param {object} data - 会话数据 {sessionId}
 * @returns {Promise} - 返回Promise对象
 */
export function deleteChatSession(data) {
  return post('/user/chat/session/delete', data)
}